#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
基于example_test_cases.xlsx创建正确的test_cases.xlsx文件
"""

import pandas as pd
from pathlib import Path
import shutil
from datetime import datetime

def create_correct_test_cases():
    """基于example_test_cases.xlsx创建正确的test_cases.xlsx文件"""
    
    # 读取源文件
    source_file = Path('tests/data/example_test_cases.xlsx')
    target_file = Path('tests/data/test_cases.xlsx')
    
    if not source_file.exists():
        print(f"源文件不存在: {source_file}")
        return
    
    # 如果目标文件存在，创建备份
    if target_file.exists():
        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
        backup_file = target_file.with_suffix(f'.backup_{timestamp}.xlsx')
        shutil.copy2(target_file, backup_file)
        print(f"已创建备份文件: {backup_file}")
    
    try:
        # 读取源数据
        df = pd.read_excel(source_file)
        print(f"\n读取源文件: {source_file}")
        print(f"数据形状: {df.shape}")
        print(f"列名: {list(df.columns)}")
        
        # 验证必要字段
        required_fields = ['test_case_id', 'test_name', 'api_method', 'api_path', 'expected_status_code']
        missing_fields = [field for field in required_fields if field not in df.columns]
        
        if missing_fields:
            print(f"❌ 源文件缺少必要字段: {missing_fields}")
            return
        
        print("✓ 源文件包含所有必要字段")
        
        # 按API方法分组数据
        post_cases = df[df['api_method'] == 'POST'].copy()
        get_cases = df[df['api_method'] == 'GET'].copy()
        
        # 如果没有GET测试用例，创建一些
        if get_cases.empty:
            print("创建GET测试用例...")
            get_test_cases = [
                {
                    'test_case_id': 'TC_GET_001',
                    'test_name': '查询用户-正常查询',
                    'api_method': 'GET',
                    'api_path': '/api/v1/users/1',
                    'name': '',
                    'email': '',
                    'age': '',
                    'expected_status_code': 200,
                    'expected_result': 'success',
                    'description': '查询存在的用户信息'
                },
                {
                    'test_case_id': 'TC_GET_002',
                    'test_name': '查询用户-用户不存在',
                    'api_method': 'GET',
                    'api_path': '/api/v1/users/999',
                    'name': '',
                    'email': '',
                    'age': '',
                    'expected_status_code': 404,
                    'expected_result': 'error',
                    'description': '查询不存在的用户'
                }
            ]
            get_cases = pd.DataFrame(get_test_cases)
        
        # 创建系统接口测试用例
        system_test_cases = [
            {
                'test_case_id': 'TC_SYS_001',
                'test_name': '系统健康检查',
                'api_method': 'GET',
                'api_path': '/health',
                'name': '',
                'email': '',
                'age': '',
                'expected_status_code': 200,
                'expected_result': 'success',
                'description': '检查系统健康状态'
            },
            {
                'test_case_id': 'TC_SYS_002',
                'test_name': '获取API版本信息',
                'api_method': 'GET',
                'api_path': '/api/version',
                'name': '',
                'email': '',
                'age': '',
                'expected_status_code': 200,
                'expected_result': 'success',
                'description': '获取API版本信息'
            }
        ]
        system_cases = pd.DataFrame(system_test_cases)
        
        # 创建Excel文件，包含多个工作表
        with pd.ExcelWriter(target_file, engine='openpyxl') as writer:
            # 所有测试用例工作表
            all_cases = pd.concat([post_cases, get_cases, system_cases], ignore_index=True)
            all_cases.to_excel(writer, sheet_name='所有测试用例', index=False)
            print(f"✓ 创建工作表 '所有测试用例': {len(all_cases)} 个测试用例")
            
            # 用户创建测试工作表
            post_cases.to_excel(writer, sheet_name='用户创建测试', index=False)
            print(f"✓ 创建工作表 '用户创建测试': {len(post_cases)} 个测试用例")
            
            # 用户查询测试工作表
            get_cases.to_excel(writer, sheet_name='用户查询测试', index=False)
            print(f"✓ 创建工作表 '用户查询测试': {len(get_cases)} 个测试用例")
            
            # 系统接口测试工作表
            system_cases.to_excel(writer, sheet_name='系统接口测试', index=False)
            print(f"✓ 创建工作表 '系统接口测试': {len(system_cases)} 个测试用例")
        
        print(f"\n✅ 成功创建 {target_file}")
        
        # 验证创建的文件
        print("\n验证创建的文件:")
        xl = pd.ExcelFile(target_file)
        print(f"工作表: {xl.sheet_names}")
        
        for sheet_name in xl.sheet_names:
            df_check = pd.read_excel(target_file, sheet_name=sheet_name)
            print(f"  {sheet_name}: {len(df_check)} 行, 列: {list(df_check.columns)}")
            
            # 检查expected_status_code字段
            if 'expected_status_code' in df_check.columns:
                null_count = df_check['expected_status_code'].isnull().sum()
                print(f"    expected_status_code空值: {null_count}")
                if null_count == 0:
                    print(f"    expected_status_code值: {df_check['expected_status_code'].tolist()}")
        
    except Exception as e:
        print(f"❌ 创建过程中出现错误: {e}")
        raise

if __name__ == "__main__":
    create_correct_test_cases()